﻿using System.Collections.ObjectModel;

namespace Renci.Data.Interop.OpenGIS.Gml
{
    /// <remarks/>
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractGeneralTransformationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(TransformationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(AbstractGeneralConversionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ConversionType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(PassThroughOperationType))]
    [System.Xml.Serialization.XmlIncludeAttribute(typeof(ConcatenatedOperationType))]
    [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
    [System.SerializableAttribute()]
    [System.Diagnostics.DebuggerStepThroughAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://www.opengis.net/gml")]
    public abstract class AbstractCoordinateOperationType : AbstractCoordinateOperationBaseType
    {
        private Collection<IdentifierType> _coordinateOperationIds = new Collection<IdentifierType>();
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("coordinateOperationID")]
        public Collection<IdentifierType> CoordinateOperationIds 
        {
            get
            {
                return this._coordinateOperationIds;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("remarks")]
        public StringOrRefType Remarks { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("operationVersion")]
        public string OperationVersion { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("validArea")]
        public ExtentType ValidArea { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("scope")]
        public string Scope { get; set; }

        private Collection<AbstractPositionalAccuracyType> _positionalAccuracy = new Collection<AbstractPositionalAccuracyType>();
        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("covarianceMatrix", Type = typeof(CovarianceMatrixType))]
        [System.Xml.Serialization.XmlElementAttribute("relativeInternalPositionalAccuracy", Type = typeof(RelativeInternalPositionalAccuracyType))]
        [System.Xml.Serialization.XmlElementAttribute("absoluteExternalPositionalAccuracy", Type = typeof(AbsoluteExternalPositionalAccuracyType))]
        public Collection<AbstractPositionalAccuracyType> PositionalAccuracy
        {
            get
            {
                return this._positionalAccuracy;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("sourceCRS")]
        public CRSRefType SourceCrs { get; set; }

        /// <remarks/>
        [System.Xml.Serialization.XmlElementAttribute("targetCRS")]
        public CRSRefType TargetCrs { get; set; }
    }
}
